package cl.tinet.reservaCD.sala;

import java.util.ArrayList;

import javax.annotation.PostConstruct;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;

import cl.tinet.reservaCD.exception.SalaExisteException;
import cl.tinet.reservaCD.exception.SalaNoExisteException;

import cl.tinet.reservaCD.modelo.Sala;

/**
 * 
 * Clase bean de la sala.
 * 
 * @author Carlos Duque.
 */
@Stateless(mappedName = "beanSala", name = "beanSala")
public class SalaBeanImpl implements SalaBean {

    /**
     * Manejador de entidad y contexto de persistencia de los datos.
     */
    @PersistenceContext(unitName = "MySqlDS")
    private EntityManager em;
    /**
     * Instancia de Sala Dao.
     */
    private SalaDao daoSala;

    /**
     * Instanciador de nuevo Entity Manager para cada acceso a la clase.
     */
    @PostConstruct
    public void init() {
        daoSala = new SalaDaoImpl(em);
    }

    /**
     * {@inheritDoc}
     * 
     */
    public void crearSala(Sala salaCrear) throws SalaExisteException {
        Sala salaBuscar = buscarSala(salaCrear);
        if (salaBuscar != null) {
            throw new SalaExisteException(SalaExisteException.SALA_EXISTE);
        } else {
            daoSala.crearSala(salaCrear);
        }

    }

    /**
     * {@inheritDoc}
     */
    public void eliminarSala(Sala salaEliminar) throws SalaNoExisteException {

        Sala salaBuscar = buscarSala(salaEliminar);

        if (salaBuscar != null) {
            daoSala.eliminarSala(salaBuscar);
        } else {
            throw new SalaNoExisteException(
                    SalaNoExisteException.SALA_NO_EXISTE);
        }
    }

    /**
     * {@inheritDoc}
     */
    public void actualizarSala(Sala salaActualizar)
            throws SalaNoExisteException {

        Sala salaBuscar = buscarSala(salaActualizar);

        if (salaBuscar != null) {
            daoSala.actualizarSala(salaActualizar);
        } else {
            throw new SalaNoExisteException(
                    SalaNoExisteException.SALA_NO_EXISTE);
        }
    }

    /**
     * {@inheritDoc}
     */
    public Sala buscarSala(Sala salaBusqueda) {

        Sala sala = null;
        try {
            sala = daoSala.buscarSala(salaBusqueda);
        } catch (NoResultException e) {
            System.out.println("No esta la sala");
        }
        return sala;
    }

    /**
     * {@inheritDoc}
     */
    public ArrayList<Sala> listarSala() {
        return daoSala.listaSala();
    }

}
